package utils

import (
	"os"
	"path"
	"path/filepath"
	"runtime"
	"strings"
)

// InSlice 判断切片中是否存在某数据
func InSlice(items []string, item string) bool {
	for _, eachItem := range items {
		if eachItem == item {
			return true
		}
	}
	return false
}

//func main() {
//	fmt.Println("getTmpDir（当前系统临时目录） = ", GetTmpDir())
//	fmt.Println("getCurrentAbPathByExecutable（仅支持go build） = ", GetCurrentAbPathByExecutable())
//	fmt.Println("getCurrentAbPathByCaller（仅支持go run） = ", GetCurrentAbPathByCaller())
//	fmt.Println("getCurrentAbPath（最终方案-全兼容） = ", GetCurrentAbPath())
//}

// 最终方案-全兼容
func GetCurrentAbPath() string {
	dir := GetCurrentAbPathByExecutable()
	if strings.Contains(dir, GetTmpDir()) {
		return GetCurrentAbPathByCaller()
	}
	return dir
}

// 获取系统临时目录，兼容go run
func GetTmpDir() string {
	dir := os.Getenv("TEMP")
	if dir == "" {
		dir = os.Getenv("TMP")
	}
	res, _ := filepath.EvalSymlinks(dir)
	return res
}

// 获取当前执行文件绝对路径
func GetCurrentAbPathByExecutable() string {
	exePath, err := os.Executable()
	if err != nil {
		panic(err)
	}
	res, _ := filepath.EvalSymlinks(filepath.Dir(exePath))
	return res
}

// 获取当前执行文件绝对路径（go run）
func GetCurrentAbPathByCaller() string {
	var abPath string
	_, filename, _, ok := runtime.Caller(0)
	if ok {
		abPath = path.Dir(filename)
	}
	return abPath
}

// 删除slice中为空的字符
func DelSpace(sl []string) []string {
	newSlice := make([]string, 0)
	for _, s := range sl {
		if s != "" {
			newSlice = append(newSlice, s)
		}
	}
	return newSlice
}
